library(tidyverse)
library(tidycensus)
library(dplyr)
library(sf)
library(tigris)
library(ggplot2)
library(usmap)
library(maps)
library(mapview)
library(leaflet)
library(htmlwidgets)

census_api_key("8b69f2765f65670c2183febdffce6afc73c72101", install=TRUE, overwrite=TRUE)
readRenviron("~/.Renviron")

Data Prep & Exploration

Before diving head first into this dataset, it’s important to understand what this data means and what it represents. The dataset, which was downloaded from The Marshall Project’s page on Observable (https://observablehq.com/@themarshallproject/adults-in-correctional-facilities-from-decennial-census), is composed of the number of adults in correctional facilities by county. This population data was collected by the U.S. Census Bureau in 2000, 2010, and 2020.

It’s also important to note that the Census Bureau uses the term “correctional facility” to refer to federal detention centers, federal and state prisons, local jails, correctional residential facilities, and military jails.

When first downloaded and read into RStudio, the dataset will include the following variables or columns:

Although these variables are useful on their own, we’ll also add some new ones below. This will help us better understand what potential patterns this data is showing us and how the data as a whole fits together.


incarcerated_pop <- read_csv("data/census_incarceration.csv") %>%
  rename(fips = FIPS) # this standardizes the column names
Rows: 3211 Columns: 9
── Column specification ───────────────────────────────────────────────────────────────────────────────────────
Delimiter: ","
chr (2): state, county
dbl (7): total_population_20, incarcerated_20, total_population_10, incarcerated_10, total_population_00, i...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
nrow(incarcerated_pop) # 3211 records
[1] 3211
ncol(incarcerated_pop) # 9 columns/variables
[1] 9
View(incarcerated_pop)

# the following code adds columns that display the percent of a county's adult population that's incarcerated and the incarceration rates for 2000, 2010, and 2020

incarcerated_pop <- incarcerated_pop %>%
  mutate(percent_incarcerated_20 = (incarcerated_20/total_population_20)*100) %>%
  mutate(percent_incarcerated_10 = (incarcerated_10/total_population_10)*100) %>%
  mutate(percent_incarcerated_00 = (incarcerated_00/total_population_00)*100)

# write.csv(incarcerated_pop, "updated_census_incarceration.csv", row.names = TRUE)

# the next few lines of code returns a tibble displaying the counties with the highest percentages of incarcerated adult populations in 2020, 2010, and 2020

incarcerated_pop %>%
  arrange(desc(percent_incarcerated_20)) %>%
  select(state, county, percent_incarcerated_20)

# 2020
# CO    Crowley County  48.1256332      
# PA    Forest County   38.0467518      
# MS    Issaquena County    36.8460389      
# LA    West Feliciana Parish   34.5133899      
# GA    Wheeler County 31.6155802

incarcerated_pop %>%
  arrange(desc(percent_incarcerated_10)) %>%
  select(state, county, percent_incarcerated_10)

# 2010
# CO    Crowley County  45.6294007      
# TX    Concho County   38.0719354      
# LA    West Feliciana Parish   33.0944000      
# CO    Bent County 32.2818895      
# TX    Garza County    30.8775731  

incarcerated_pop %>%
  arrange(desc(percent_incarcerated_00)) %>%
  select(state, county, percent_incarcerated_00)

# 2000
# CO    Crowley County  35.4295034      
# LA    West Feliciana Parish   33.2340679      
# TX    Concho County   32.7534039      
# FL    Union County    30.2112781      
# IL    Brown County    27.5107914

After exploring the data a bit closer in the codeblock above, some interesting patterns appear. Crowley County and West Feliciana Parish, for example, are on every top five list for each year. It’s also a bit alarming how high the incarceration rates are. In 2020, roughly 48% of Crowley County’s population was incarcerated. That accounts for almost half of the population. Also, at least three of the counties in each list are located in the south.

Now that we have a better understanding of this data, the next codeblock creates data frames for each state. Each state data frame also have new columns that represent statewide data for 2000, 2010, and 2020. Here’s a breakdown of those new columns and what they mean:

Important Note: The key below does not include numbers at the end as seen in the codeblock. The full column name would look like this -> total_state_pop_20. The numbers at the end represent either 2000 (00), 2010 (10), or 2020 (20).

As you load each data frame, it might look like there are some strange duplicates under the columns listed above. These duplicates are actually OK to keep. I used these figures to build another dataset we will use later.

Creating State Dataframes


# data frames for each state with total pop, total incarcerated, state incarceration rate, percent of state incarcerated (2000-2020)

massachusetts <- subset(incarcerated_pop, state == "MA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

connecticut <- subset(incarcerated_pop, state == "CT") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

west_virginia <- subset(incarcerated_pop, state == "WV") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

vermont <- subset(incarcerated_pop, state == "VT") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

rhode_island <- subset(incarcerated_pop, state == "RI") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

washington_dc <- subset(incarcerated_pop, state == "DC") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

pennsylvania <- subset(incarcerated_pop, state == "PA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

arkansas <- subset(incarcerated_pop, state == "AR") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

oklahoma <- subset(incarcerated_pop, state == "OK") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

nebraska <- subset(incarcerated_pop, state == "NE") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

idaho <- subset(incarcerated_pop, state == "ID") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

missouri <- subset(incarcerated_pop, state == "MO") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

louisiana <- subset(incarcerated_pop, state == "LA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

utah <- subset(incarcerated_pop, state == "UT") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

arizona <- subset(incarcerated_pop, state == "AZ") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

south_carolina <- subset(incarcerated_pop, state == "SC") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

georgia <- subset(incarcerated_pop, state == "GA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

tennessee <- subset(incarcerated_pop, state == "TN") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

new_york <- subset(incarcerated_pop, state == "NY") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

mississippi <- subset(incarcerated_pop, state == "MS") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

new_mexico <- subset(incarcerated_pop, state == "NM") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

illinois <- subset(incarcerated_pop, state == "IL") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

michigan <- subset(incarcerated_pop, state == "MI") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

maine <- subset(incarcerated_pop, state == "ME") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

indiana <- subset(incarcerated_pop, state == "IN") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

north_carolina <- subset(incarcerated_pop, state == "NC") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

delaware <- subset(incarcerated_pop, state == "DE") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

texas <- subset(incarcerated_pop, state == "TX") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

alabama <- subset(incarcerated_pop, state == "AL") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

california <- subset(incarcerated_pop, state == "CA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

virginia <- subset(incarcerated_pop, state == "VA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

south_dakota <- subset(incarcerated_pop, state == "SD") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

montana <- subset(incarcerated_pop, state == "MT") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

new_jersey <- subset(incarcerated_pop, state == "NJ") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

hawaii <- subset(incarcerated_pop, state == "HI") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

ohio <- subset(incarcerated_pop, state == "OH") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

minnesota <- subset(incarcerated_pop, state == "MN") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

oregon <- subset(incarcerated_pop, state == "OR") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

north_dakota <- subset(incarcerated_pop, state == "ND") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

kentucky <- subset(incarcerated_pop, state == "KY") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

new_hampshire <- subset(incarcerated_pop, state == "NH") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

colorado <- subset(incarcerated_pop, state == "CO") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

washington <- subset(incarcerated_pop, state == "WA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

alaska <- subset(incarcerated_pop, state == "AK") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

wyoming <- subset(incarcerated_pop, state == "WY") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

iowa <- subset(incarcerated_pop, state == "IA") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

wisconsin <- subset(incarcerated_pop, state == "WI") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

florida <- subset(incarcerated_pop, state == "FL") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

kansas <- subset(incarcerated_pop, state == "KS") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

nevada <- subset(incarcerated_pop, state == "NV") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

maryland <- subset(incarcerated_pop, state == "MD") %>%
  mutate(total_state_pop_20 = sum(total_population_20)) %>% 
  mutate(total_incarcerated_20 = sum(incarcerated_20)) %>%
  mutate(state_incarceration_rate_20 = total_incarcerated_20/total_state_pop_20*100000) %>%
  mutate(total_pct_incarcerated_20 = total_incarcerated_20/total_state_pop_20*100) %>% # 2010 below
  mutate(total_state_pop_10 = sum(total_population_10)) %>%
  mutate(total_incarcerated_10 = sum(incarcerated_10)) %>%
  mutate(state_incarceration_rate_10 = total_incarcerated_10/total_state_pop_10*100000) %>%
  mutate(total_pct_incarcerated_10 = total_incarcerated_10/total_state_pop_10*100) %>% # 2000 below
  mutate(total_state_pop_00 = sum(total_population_00)) %>%
  mutate(total_incarcerated_00 = sum(incarcerated_00)) %>%
  mutate(state_incarceration_rate_00 = total_incarcerated_10/total_state_pop_00*100000) %>%
  mutate(total_pct_incarcerated_00 = total_incarcerated_10/total_state_pop_00*100)

Now that all of the state data frames have loaded successfully, let’s start taking an even closer look. Using the guiding questions below, you will start to see interesting patterns emerge.

First, let’s look at incarcerations rates and how they compare to population over time.

1. Over time, which 10 states had the highest incarceration rate per 100,000 people over time? How do the incarceration rates in those states compare to population?

state_incarceration_data <- inner_join(us_geo, state_incarceration_data, by = c("fips" = "fips"))
Error in `sf_column %in% names(g)`:
! Can't join on `x$fips` x `y$fips` because of incompatible types.
ℹ `x$fips` is of type <character>>.
ℹ `y$fips` is of type <double>>.
Backtrace:
 1. dplyr::inner_join(us_geo, state_incarceration_data, by = c(fips = "fips"))
 6. dplyr:::inner_join.data.frame(...)

Now that we have a better picture of what incarceration rates have looked over time across the United States, let’s transition into looking at regions only. For this next part, we’re using the regions designated by the Census Bureau.

2. Which U.S. region had the highest incarceration rates in 2020?

Based on the maps generated by the code below, it looks like Southern region of the United States generally has the highest incarceration rates. In 2020, Louisiana and West Virginia had the highest incarceration rates.

To answer the following question, we’ll use a cleaner version of our initial dataset. This new, county-level dataset also includes latitude and longitude coordinates and no longer has columns for state specific information. Before diving into our continued analysis of this data, we’ll add on some new columns to find the net change in incarcerated population counts since 2000.

3. Which were the top 10 U.S. counties that saw the largest net change in population counts since 2000? Alternatively, which were the top 10 U.S. counties that saw either a decrease or no change in prison population since 2010?

Now, let’s look at what percentage makes up the incarcerated population in each state and compare it to figures from 2010 and 2000. Have they changed at all? What could account for that change?

4. For each U.S. state, roughly how much (%) of the state’s adult population was incarcerated/being held in a correctional facility in 2020? Compare it to figures from 2010 and 2000.


# 2020

plot_usmap(data = incarceration_rates_pct, values = "pct_incarcerated_20", color = "black") + 
  labs(title = "Percent of Total Population Incarcerated by State in 2020") +
  scale_fill_continuous(
    low = "white", high = "deep pink 4", name = "Percent Incarcerated", label = scales::comma) + theme(legend.position = "right")

# 2010

plot_usmap(data = incarceration_rates_pct, values = "pct_incarcerated_10", color = "black") + 
  labs(title = "Percent of Total Population Incarcerated by State in 2010") +
  scale_fill_continuous(
    low = "white", high = "deep pink 4", name = "Percent Incarcerated", label = scales::comma) + theme(legend.position = "right")

# 2000

plot_usmap(data = incarceration_rates_pct, values = "pct_incarcerated_00", color = "black") + 
  labs(title = "Percent of Total Population Incarcerated by State in 2000") +
  scale_fill_continuous(
    low = "white", high = "deep pink 4", name = "Percent Incarcerated", label = scales::comma) + theme(legend.position = "right")

5. Using ACS data, compare median household incomes and incarceration rates for Colorado, Pennsylvania, Mississippi, Louisiana, and Georgia.

For this final question, we’re looking at the five states we found in the very first codeblock where we looked at the counties with the highest percentages of incarcerated population. As a refresher, those states/counties are listed below:

CO Crowley County 48.1256332
# PA Forest County 38.0467518
# MS Issaquena County 36.8460389
# LA West Feliciana Parish 34.5133899
# GA Wheeler County 31.6155802


# highest county incarceration rates

# CO    Crowley County  48.1256332      
# PA    Forest County   38.0467518      
# MS    Issaquena County    36.8460389      
# LA    West Feliciana Parish   34.5133899      
# GA    Wheeler County 31.6155802

# load acs variables

acs_variables <- load_variables(year = 2020,
                      dataset = "acs5",
                      cache = TRUE)

# load median income estimates for Colorado, Pennsylvania, Mississippi, Louisiana, and Georgia

colorado_medincome <- get_acs(geography = "county",
              variables = c(medincome = "B19013_001"),
              state = "CO",
              year = 2020)

pennsylvania_medincom <- get_acs(geography = "county",
              variables = c(medincome = "B19013_001"),
              state = "PA",
              year = 2020)

mississippi_medincom <- get_acs(geography = "county",
              variables = c(medincome = "B19013_001"),
              state = "MS",
              year = 2020)

louisiana_acs(geography = "county",
              variables = c(medincome = "B19013_001"),
              state = "LA",
              year = 2020)

georgia_acs(geography = "county",
              variables = c(medincome = "B19013_001"),
              state = "GA",
              year = 2020)

Summary

LS0tDQp0aXRsZTogIkFuYWx5emluZyB0aGUgVW5pdGVkIFN0YXRlcycgSW5jYXJjZXJhdGVkIEFkdWx0IFBvcHVsYXRpb24iDQphdXRob3I6ICJBbWFuZGEgSGVybmFuZGV6Ig0KZGF0ZTogIjUvMTAvMjAyMiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodGlkeWNlbnN1cykNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeSh0aWdyaXMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHVzbWFwKQ0KbGlicmFyeShtYXBzKQ0KbGlicmFyeShtYXB2aWV3KQ0KbGlicmFyeShsZWFmbGV0KQ0KbGlicmFyeShodG1sd2lkZ2V0cykNCg0KY2Vuc3VzX2FwaV9rZXkoIjhiNjlmMjc2NWY2NTY3MGMyMTgzZmViZGZmY2U2YWZjNzNjNzIxMDEiLCBpbnN0YWxsPVRSVUUsIG92ZXJ3cml0ZT1UUlVFKQ0KcmVhZFJlbnZpcm9uKCJ+Ly5SZW52aXJvbiIpDQoNCmBgYA0KDQojIyMgRGF0YSBQcmVwICYgRXhwbG9yYXRpb24NCg0KQmVmb3JlIGRpdmluZyBoZWFkIGZpcnN0IGludG8gdGhpcyBkYXRhc2V0LCBpdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkYXRhIG1lYW5zIGFuZCB3aGF0IGl0IHJlcHJlc2VudHMuIFRoZSBkYXRhc2V0LCB3aGljaCB3YXMgZG93bmxvYWRlZCBmcm9tIFRoZSBNYXJzaGFsbCBQcm9qZWN0J3MgcGFnZSBvbiBPYnNlcnZhYmxlIChodHRwczovL29ic2VydmFibGVocS5jb20vQHRoZW1hcnNoYWxscHJvamVjdC9hZHVsdHMtaW4tY29ycmVjdGlvbmFsLWZhY2lsaXRpZXMtZnJvbS1kZWNlbm5pYWwtY2Vuc3VzKSwgaXMgY29tcG9zZWQgb2YgdGhlIG51bWJlciBvZiBhZHVsdHMgaW4gY29ycmVjdGlvbmFsIGZhY2lsaXRpZXMgYnkgY291bnR5LiBUaGlzIHBvcHVsYXRpb24gZGF0YSB3YXMgY29sbGVjdGVkIGJ5IHRoZSBVLlMuIENlbnN1cyBCdXJlYXUgaW4gMjAwMCwgMjAxMCwgYW5kIDIwMjAuDQoNCkl0J3MgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBDZW5zdXMgQnVyZWF1IHVzZXMgdGhlIHRlcm0gImNvcnJlY3Rpb25hbCBmYWNpbGl0eSIgdG8gcmVmZXIgdG8gZmVkZXJhbCBkZXRlbnRpb24gY2VudGVycywgZmVkZXJhbCBhbmQgc3RhdGUgcHJpc29ucywgbG9jYWwgamFpbHMsIGNvcnJlY3Rpb25hbCByZXNpZGVudGlhbCBmYWNpbGl0aWVzLCBhbmQgbWlsaXRhcnkgamFpbHMuDQoNCldoZW4gZmlyc3QgZG93bmxvYWRlZCBhbmQgcmVhZCBpbnRvIFJTdHVkaW8sIHRoZSBkYXRhc2V0IHdpbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBvciBjb2x1bW5zOiANCg0KKiBzdGF0ZSAtPiBTdGF0ZSBwb3N0YWwgY29kZXMNCiogY291bnR5IC0+IENvdW50eSBuYW1lDQoqIEZJUFMgLT4gNi1kaWdpdCBGSVBTIGNvZGUgZm9yIHRoZSBjb3VudHkNCiogdG90YWxfcG9wdWxhdGlvbl8yMCAtPiBUb3RhbCBwb3B1bGF0aW9uIG9mIHRoZSBjb3VudHkgaW4gdGhlIDIwMjAgQ2Vuc3VzDQoqIGluY2FyY2VyYXRlZF8yMCAtPiBOdW1iZXIgb2YgaW5jYXJjZXJhdGVkIHBlb3BsZSBpbiBjb3JyZWN0aW9uYWwgZmFjaWxpdGllcyBhcyBvZiB0aGUgMjAyMCBDZW5zdXMNCiogdG90YWxfcG9wdWxhdGlvbl8xMCAtPiBUb3RhbCBwb3B1bGF0aW9uIG9mIHRoZSBjb3VudHkgaW4gdGhlIDIwMTAgQ2Vuc3VzDQoqIGluY2FyY2VyYXRlZF8xMCAtPiBOdW1iZXIgb2YgaW5jYXJjZXJhdGVkIHBlb3BsZSBpbiBjb3JyZWN0aW9uYWwgZmFjaWxpdGllcyBhcyBvZiB0aGUgMjAxMCBDZW5zdXMNCiogdG90YWxfcG9wdWxhdGlvbl8wMCAtPiBUb3RhbCBwb3B1bGF0aW9uIG9mIHRoZSBjb3VudHkgaW4gdGhlIDIwMDAgQ2Vuc3VzDQoqIGluY2FyY2VyYXRlZF8wMCAtPiBOdW1iZXIgb2YgaW5jYXJjZXJhdGVkIHBlb3BsZSBpbiBjb3JyZWN0aW9uYWwgZmFjaWxpdGllcyBhcyBvZiB0aGUgMjAwMCBDZW5zdXMNCg0KQWx0aG91Z2ggdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VmdWwgb24gdGhlaXIgb3duLCB3ZSdsbCBhbHNvIGFkZCBzb21lIG5ldyBvbmVzIGJlbG93LiBUaGlzIHdpbGwgaGVscCB1cyBiZXR0ZXIgdW5kZXJzdGFuZCB3aGF0IHBvdGVudGlhbCBwYXR0ZXJucyB0aGlzIGRhdGEgaXMgc2hvd2luZyB1cyBhbmQgaG93IHRoZSBkYXRhIGFzIGEgd2hvbGUgZml0cyB0b2dldGhlci4gDQoNCmBgYHtyfQ0KDQppbmNhcmNlcmF0ZWRfcG9wIDwtIHJlYWRfY3N2KCJkYXRhL2NlbnN1c19pbmNhcmNlcmF0aW9uLmNzdiIpICU+JQ0KICByZW5hbWUoZmlwcyA9IEZJUFMpICMgdGhpcyBzdGFuZGFyZGl6ZXMgdGhlIGNvbHVtbiBuYW1lcw0KDQpucm93KGluY2FyY2VyYXRlZF9wb3ApICMgMzIxMSByZWNvcmRzDQpuY29sKGluY2FyY2VyYXRlZF9wb3ApICMgOSBjb2x1bW5zL3ZhcmlhYmxlcw0KDQpWaWV3KGluY2FyY2VyYXRlZF9wb3ApDQoNCiMgdGhlIGZvbGxvd2luZyBjb2RlIGFkZHMgY29sdW1ucyB0aGF0IGRpc3BsYXkgdGhlIHBlcmNlbnQgb2YgYSBjb3VudHkncyBhZHVsdCBwb3B1bGF0aW9uIHRoYXQncyBpbmNhcmNlcmF0ZWQgYW5kIHRoZSBpbmNhcmNlcmF0aW9uIHJhdGVzIGZvciAyMDAwLCAyMDEwLCBhbmQgMjAyMA0KDQppbmNhcmNlcmF0ZWRfcG9wIDwtIGluY2FyY2VyYXRlZF9wb3AgJT4lDQogIG11dGF0ZShwZXJjZW50X2luY2FyY2VyYXRlZF8yMCA9IChpbmNhcmNlcmF0ZWRfMjAvdG90YWxfcG9wdWxhdGlvbl8yMCkqMTAwKSAlPiUNCiAgbXV0YXRlKHBlcmNlbnRfaW5jYXJjZXJhdGVkXzEwID0gKGluY2FyY2VyYXRlZF8xMC90b3RhbF9wb3B1bGF0aW9uXzEwKSoxMDApICU+JQ0KICBtdXRhdGUocGVyY2VudF9pbmNhcmNlcmF0ZWRfMDAgPSAoaW5jYXJjZXJhdGVkXzAwL3RvdGFsX3BvcHVsYXRpb25fMDApKjEwMCkNCg0KIyB3cml0ZS5jc3YoaW5jYXJjZXJhdGVkX3BvcCwgInVwZGF0ZWRfY2Vuc3VzX2luY2FyY2VyYXRpb24uY3N2Iiwgcm93Lm5hbWVzID0gVFJVRSkNCg0KIyB0aGUgbmV4dCBmZXcgbGluZXMgb2YgY29kZSByZXR1cm5zIGEgdGliYmxlIGRpc3BsYXlpbmcgdGhlIGNvdW50aWVzIHdpdGggdGhlIGhpZ2hlc3QgcGVyY2VudGFnZXMgb2YgaW5jYXJjZXJhdGVkIGFkdWx0IHBvcHVsYXRpb25zIGluIDIwMjAsIDIwMTAsIGFuZCAyMDIwDQoNCmluY2FyY2VyYXRlZF9wb3AgJT4lDQogIGFycmFuZ2UoZGVzYyhwZXJjZW50X2luY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgcGVyY2VudF9pbmNhcmNlcmF0ZWRfMjApDQoNCiMgMjAyMA0KIyBDTwlDcm93bGV5IENvdW50eQk0OC4xMjU2MzMyCQkNCiMgUEEJRm9yZXN0IENvdW50eQkzOC4wNDY3NTE4CQkNCiMgTVMJSXNzYXF1ZW5hIENvdW50eQkzNi44NDYwMzg5CQkNCiMgTEEJV2VzdCBGZWxpY2lhbmEgUGFyaXNoCTM0LjUxMzM4OTkJCQ0KIyBHQQlXaGVlbGVyIENvdW50eSAzMS42MTU1ODAyDQoNCmluY2FyY2VyYXRlZF9wb3AgJT4lDQogIGFycmFuZ2UoZGVzYyhwZXJjZW50X2luY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgcGVyY2VudF9pbmNhcmNlcmF0ZWRfMTApDQoNCiMgMjAxMA0KIyBDTwlDcm93bGV5IENvdW50eQk0NS42Mjk0MDA3CQkNCiMgVFgJQ29uY2hvIENvdW50eQkzOC4wNzE5MzU0CQkNCiMgTEEJV2VzdCBGZWxpY2lhbmEgUGFyaXNoCTMzLjA5NDQwMDAJCQ0KIyBDTwlCZW50IENvdW50eQkzMi4yODE4ODk1CQkNCiMgVFgJR2FyemEgQ291bnR5CTMwLjg3NzU3MzEJDQoNCmluY2FyY2VyYXRlZF9wb3AgJT4lDQogIGFycmFuZ2UoZGVzYyhwZXJjZW50X2luY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgcGVyY2VudF9pbmNhcmNlcmF0ZWRfMDApDQoNCiMgMjAwMA0KIyBDTwlDcm93bGV5IENvdW50eQkzNS40Mjk1MDM0CQkNCiMgTEEJV2VzdCBGZWxpY2lhbmEgUGFyaXNoCTMzLjIzNDA2NzkJCQ0KIyBUWAlDb25jaG8gQ291bnR5CTMyLjc1MzQwMzkJCQ0KIyBGTAlVbmlvbiBDb3VudHkJMzAuMjExMjc4MQkJDQojIElMCUJyb3duIENvdW50eQkyNy41MTA3OTE0DQoNCmBgYA0KDQpBZnRlciBleHBsb3JpbmcgdGhlIGRhdGEgYSBiaXQgY2xvc2VyIGluIHRoZSBjb2RlYmxvY2sgYWJvdmUsIHNvbWUgaW50ZXJlc3RpbmcgcGF0dGVybnMgYXBwZWFyLiBDcm93bGV5IENvdW50eSBhbmQgV2VzdCBGZWxpY2lhbmEgUGFyaXNoLCBmb3IgZXhhbXBsZSwgYXJlIG9uIGV2ZXJ5IHRvcCBmaXZlIGxpc3QgZm9yIGVhY2ggeWVhci4gSXQncyBhbHNvIGEgYml0IGFsYXJtaW5nIGhvdyBoaWdoIHRoZSBpbmNhcmNlcmF0aW9uIHJhdGVzIGFyZS4gSW4gMjAyMCwgcm91Z2hseSA0OCUgb2YgQ3Jvd2xleSBDb3VudHkncyBwb3B1bGF0aW9uIHdhcyBpbmNhcmNlcmF0ZWQuIFRoYXQgYWNjb3VudHMgZm9yIGFsbW9zdCBoYWxmIG9mIHRoZSBwb3B1bGF0aW9uLiBBbHNvLCBhdCBsZWFzdCB0aHJlZSBvZiB0aGUgY291bnRpZXMgaW4gZWFjaCBsaXN0IGFyZSBsb2NhdGVkIGluIHRoZSBzb3V0aC4NCg0KTm93IHRoYXQgd2UgaGF2ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgZGF0YSwgdGhlIG5leHQgY29kZWJsb2NrIGNyZWF0ZXMgZGF0YSBmcmFtZXMgZm9yIGVhY2ggc3RhdGUuIEVhY2ggc3RhdGUgZGF0YSBmcmFtZSBhbHNvIGhhdmUgbmV3IGNvbHVtbnMgdGhhdCByZXByZXNlbnQgc3RhdGV3aWRlIGRhdGEgZm9yIDIwMDAsIDIwMTAsIGFuZCAyMDIwLiBIZXJlJ3MgYSBicmVha2Rvd24gb2YgdGhvc2UgbmV3IGNvbHVtbnMgYW5kIHdoYXQgdGhleSBtZWFuOiANCg0KPiBJbXBvcnRhbnQgTm90ZTogVGhlIGtleSBiZWxvdyBkb2VzIG5vdCBpbmNsdWRlIG51bWJlcnMgYXQgdGhlIGVuZCBhcyBzZWVuIGluIHRoZSBjb2RlYmxvY2suIFRoZSBmdWxsIGNvbHVtbiBuYW1lIHdvdWxkIGxvb2sgbGlrZSB0aGlzIC0+IHRvdGFsX3N0YXRlX3BvcF8yMC4gVGhlIG51bWJlcnMgYXQgdGhlIGVuZCByZXByZXNlbnQgZWl0aGVyIDIwMDAgKDAwKSwgMjAxMCAoMTApLCBvciAyMDIwICgyMCkuDQoNCiogdG90YWxfc3RhdGVfcG9wIC0+IFRvdGFsIHBvcHVsYXRpb24gZm9yIHRoZSBzdGF0ZQ0KKiB0b3RhbF9pbmNhcmNlcmF0ZWQgLT4gTnVtYmVyIG9mIGluY2FyY2VyYXRlZCBwZW9wbGUgaW4gY29ycmVjdGlvbmFsIGZhY2lsaXRpZXMgc3RhdGV3aWRlDQoqIHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZSAtPiBOdW1iZXIgb2YgaW5jYXJjZXJhdGVkIHBlb3BsZSBpbiBjb3JyZWN0aW9uYWwgZmFjaWxpdGllcyBzdGF0ZXdpZGUgcGVyIDEwMCwwMDAgcGVvcGxlIChwZXIgY2FwaXRhKQ0KKiB0b3RhbF9wY3RfaW5jYXJjZXJhdGVkIC0+IFRvdGFsIHBlcmNlbnQgb2Ygc3RhdGUgcG9wdWxhdGlvbiBpbmNhcmNlcmF0ZWQNCg0KQXMgeW91IGxvYWQgZWFjaCBkYXRhIGZyYW1lLCBpdCBtaWdodCBsb29rIGxpa2UgdGhlcmUgYXJlIHNvbWUgc3RyYW5nZSBkdXBsaWNhdGVzIHVuZGVyIHRoZSBjb2x1bW5zIGxpc3RlZCBhYm92ZS4gVGhlc2UgZHVwbGljYXRlcyBhcmUgYWN0dWFsbHkgT0sgdG8ga2VlcC4gSSB1c2VkIHRoZXNlIGZpZ3VyZXMgdG8gYnVpbGQgYW5vdGhlciBkYXRhc2V0IHdlIHdpbGwgdXNlIGxhdGVyLg0KDQojIyMgQ3JlYXRpbmcgU3RhdGUgRGF0YWZyYW1lcw0KDQpgYGB7cn0NCg0KIyBkYXRhIGZyYW1lcyBmb3IgZWFjaCBzdGF0ZSB3aXRoIHRvdGFsIHBvcCwgdG90YWwgaW5jYXJjZXJhdGVkLCBzdGF0ZSBpbmNhcmNlcmF0aW9uIHJhdGUsIHBlcmNlbnQgb2Ygc3RhdGUgaW5jYXJjZXJhdGVkICgyMDAwLTIwMjApDQoNCm1hc3NhY2h1c2V0dHMgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJNQSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmNvbm5lY3RpY3V0IDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiQ1QiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQp3ZXN0X3ZpcmdpbmlhIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiV1YiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQp2ZXJtb250IDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiVlQiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpyaG9kZV9pc2xhbmQgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJSSSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCndhc2hpbmd0b25fZGMgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJEQyIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCnBlbm5zeWx2YW5pYSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIlBBIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KYXJrYW5zYXMgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJBUiIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpva2xhaG9tYSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIk9LIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KbmVicmFza2EgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJORSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmlkYWhvIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiSUQiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQptaXNzb3VyaSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIk1PIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KbG91aXNpYW5hIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiTEEiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQp1dGFoIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiVVQiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQphcml6b25hIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiQVoiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpzb3V0aF9jYXJvbGluYSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIlNDIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KZ2VvcmdpYSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIkdBIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KdGVubmVzc2VlIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiVE4iKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpuZXdfeW9yayA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIk5ZIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KbWlzc2lzc2lwcGkgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJNUyIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCm5ld19tZXhpY28gPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJOTSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmlsbGlub2lzIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiSUwiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQptaWNoaWdhbiA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIk1JIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KbWFpbmUgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJNRSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmluZGlhbmEgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJJTiIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCm5vcnRoX2Nhcm9saW5hIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiTkMiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpkZWxhd2FyZSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIkRFIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KdGV4YXMgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJUWCIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmFsYWJhbWEgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJBTCIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmNhbGlmb3JuaWEgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJDQSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCnZpcmdpbmlhIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiVkEiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpzb3V0aF9kYWtvdGEgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJTRCIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCm1vbnRhbmEgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJNVCIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCm5ld19qZXJzZXkgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJOSiIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmhhd2FpaSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIkhJIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0Kb2hpbyA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIk9IIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KbWlubmVzb3RhIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiTU4iKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpvcmVnb24gPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJPUiIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCm5vcnRoX2Rha290YSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIk5EIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0Ka2VudHVja3kgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJLWSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCm5ld19oYW1wc2hpcmUgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJOSCIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmNvbG9yYWRvIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiQ08iKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQp3YXNoaW5ndG9uIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiV0EiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQphbGFza2EgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJBSyIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCnd5b21pbmcgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJXWSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCmlvd2EgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJJQSIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCndpc2NvbnNpbiA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIldJIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0KZmxvcmlkYSA8LSBzdWJzZXQoaW5jYXJjZXJhdGVkX3BvcCwgc3RhdGUgPT0gIkZMIikgJT4lDQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMjAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8yMCkpICU+JSANCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8yMCA9IHN1bShpbmNhcmNlcmF0ZWRfMjApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMCkgJT4lICMgMjAxMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzEwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMTApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8xMCA9IHN1bShpbmNhcmNlcmF0ZWRfMTApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMCkgJT4lICMgMjAwMCBiZWxvdw0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzAwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMDApKSAlPiUNCiAgbXV0YXRlKHRvdGFsX2luY2FyY2VyYXRlZF8wMCA9IHN1bShpbmNhcmNlcmF0ZWRfMDApKSAlPiUNCiAgbXV0YXRlKHN0YXRlX2luY2FyY2VyYXRpb25fcmF0ZV8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwMDAwKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3BjdF9pbmNhcmNlcmF0ZWRfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMCkNCg0Ka2Fuc2FzIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiS1MiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpuZXZhZGEgPC0gc3Vic2V0KGluY2FyY2VyYXRlZF9wb3AsIHN0YXRlID09ICJOViIpICU+JQ0KICBtdXRhdGUodG90YWxfc3RhdGVfcG9wXzIwID0gc3VtKHRvdGFsX3BvcHVsYXRpb25fMjApKSAlPiUgDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMjAgPSBzdW0oaW5jYXJjZXJhdGVkXzIwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMjAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMjAvdG90YWxfc3RhdGVfcG9wXzIwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDApICU+JSAjIDIwMTAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8xMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzEwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMTAgPSBzdW0oaW5jYXJjZXJhdGVkXzEwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMTAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzEwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDApICU+JSAjIDIwMDAgYmVsb3cNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8wMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzAwKSkgJT4lDQogIG11dGF0ZSh0b3RhbF9pbmNhcmNlcmF0ZWRfMDAgPSBzdW0oaW5jYXJjZXJhdGVkXzAwKSkgJT4lDQogIG11dGF0ZShzdGF0ZV9pbmNhcmNlcmF0aW9uX3JhdGVfMDAgPSB0b3RhbF9pbmNhcmNlcmF0ZWRfMTAvdG90YWxfc3RhdGVfcG9wXzAwKjEwMDAwMCkgJT4lDQogIG11dGF0ZSh0b3RhbF9wY3RfaW5jYXJjZXJhdGVkXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDApDQoNCm1hcnlsYW5kIDwtIHN1YnNldChpbmNhcmNlcmF0ZWRfcG9wLCBzdGF0ZSA9PSAiTUQiKSAlPiUNCiAgbXV0YXRlKHRvdGFsX3N0YXRlX3BvcF8yMCA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uXzIwKSkgJT4lIA0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzIwID0gc3VtKGluY2FyY2VyYXRlZF8yMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzIwID0gdG90YWxfaW5jYXJjZXJhdGVkXzIwL3RvdGFsX3N0YXRlX3BvcF8yMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8yMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8yMC90b3RhbF9zdGF0ZV9wb3BfMjAqMTAwKSAlPiUgIyAyMDEwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMTAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8xMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzEwID0gc3VtKGluY2FyY2VyYXRlZF8xMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzEwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8xMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8xMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMTAqMTAwKSAlPiUgIyAyMDAwIGJlbG93DQogIG11dGF0ZSh0b3RhbF9zdGF0ZV9wb3BfMDAgPSBzdW0odG90YWxfcG9wdWxhdGlvbl8wMCkpICU+JQ0KICBtdXRhdGUodG90YWxfaW5jYXJjZXJhdGVkXzAwID0gc3VtKGluY2FyY2VyYXRlZF8wMCkpICU+JQ0KICBtdXRhdGUoc3RhdGVfaW5jYXJjZXJhdGlvbl9yYXRlXzAwID0gdG90YWxfaW5jYXJjZXJhdGVkXzEwL3RvdGFsX3N0YXRlX3BvcF8wMCoxMDAwMDApICU+JQ0KICBtdXRhdGUodG90YWxfcGN0X2luY2FyY2VyYXRlZF8wMCA9IHRvdGFsX2luY2FyY2VyYXRlZF8xMC90b3RhbF9zdGF0ZV9wb3BfMDAqMTAwKQ0KDQpgYGANCg0KTm93IHRoYXQgYWxsIG9mIHRoZSBzdGF0ZSBkYXRhIGZyYW1lcyBoYXZlIGxvYWRlZCBzdWNjZXNzZnVsbHksIGxldCdzIHN0YXJ0IHRha2luZyBhbiBldmVuIGNsb3NlciBsb29rLiBVc2luZyB0aGUgZ3VpZGluZyBxdWVzdGlvbnMgYmVsb3csIHlvdSB3aWxsIHN0YXJ0IHRvIHNlZSBpbnRlcmVzdGluZyBwYXR0ZXJucyBlbWVyZ2UuDQoNCkZpcnN0LCBsZXQncyBsb29rIGF0IGluY2FyY2VyYXRpb25zIHJhdGVzIGFuZCBob3cgdGhleSBjb21wYXJlIHRvIHBvcHVsYXRpb24gb3ZlciB0aW1lLg0KDQojIyMjIDEuIE92ZXIgdGltZSwgd2hpY2ggMTAgc3RhdGVzIGhhZCB0aGUgaGlnaGVzdCBpbmNhcmNlcmF0aW9uIHJhdGUgcGVyIDEwMCwwMDAgcGVvcGxlIG92ZXIgdGltZT8gSG93IGRvIHRoZSBpbmNhcmNlcmF0aW9uIHJhdGVzIGluIHRob3NlIHN0YXRlcyBjb21wYXJlIHRvIHBvcHVsYXRpb24/DQoNCg0KDQpgYGB7cn0NCg0KIyBsb2FkIHN0YXRlIGxldmVsIGRhdGFzZXQNCnN0YXRlX2luY2FyY2VyYXRpb25fZGF0YSA8LSByZWFkX2NzdigiZGF0YS9zdGF0ZV9jZW5zdXNfaW5jYXJjZXJhdGlvbl9kYXRhLmNzdiIpDQoNCiMgMjAyMCAtIGluY2FyY2VyYXRpb24gcmF0ZXMNCg0Kc3RhdGVfaW5jYXJjZXJhdGlvbl9kYXRhICU+JQ0KICBhcnJhbmdlKGRlc2MoaW5jYXJjZXJhdGlvbl9yYXRlXzIwKSkgJT4lDQogIHNlbGVjdChzdGF0ZSwgaW5jYXJjZXJhdGlvbl9yYXRlXzIwKSAlPiUNCiAgaGVhZCgxMCkNCg0KcGxvdF91c21hcChkYXRhID0gc3RhdGVfaW5jYXJjZXJhdGlvbl9kYXRhLCB2YWx1ZXMgPSAiaW5jYXJjZXJhdGlvbl9yYXRlXzIwIiwgY29sb3IgPSAiYmxhY2siKSArIA0KICBsYWJzKHRpdGxlID0gIkluY2FyY2VyYXRpb25zIFJhdGVzIEFjcm9zcyB0aGUgVW5pdGVkIFN0YXRlcyBpbiAyMDIwIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJMb3Vpc2lhbmEgaGFzIHRoZSBoaWdoZXN0IGluY2FyY2VyYXRpb24gcmF0ZSBhdCAxMTAwIHBlciAxMDAsMDAwIHBlb3BsZS4iKSArDQogIHNjYWxlX2ZpbGxfY29udGludW91cygNCiAgICBsb3cgPSAid2hpdGUiLCBoaWdoID0gImRlZXAgc2t5IGJsdWUgNCIsIG5hbWUgPSAiSW5jYXJjZXJhdGlvbiBSYXRlIiwgbGFiZWwgPSBzY2FsZXM6OmNvbW1hKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpDQoNCiMgMjAyMCAtIHBvcHVsYXRpb24NCg0KcGxvdF91c21hcChkYXRhID0gc3RhdGVfaW5jYXJjZXJhdGlvbl9kYXRhLCB2YWx1ZXMgPSAidG90YWxfc3RhdGVfcG9wXzIwIiwgY29sb3IgPSAiYmxhY2siKSArDQogIHNjYWxlX2ZpbGxfY29udGludW91cyhsb3cgPSAid2hpdGUiLCBoaWdoID0gImRlZXAgc2t5IGJsdWUgNCIsIG5hbWUgPSAiUG9wdWxhdGlvbiIsIGxhYmVsID0gc2NhbGVzOjpjb21tYSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKSArDQogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKQ0KDQojIDIwMTAgLSBpbmNhcmNlcmF0aW9uIHJhdGVzDQoNCnN0YXRlX2luY2FyY2VyYXRpb25fZGF0YSAlPiUNCiAgYXJyYW5nZShkZXNjKGluY2FyY2VyYXRpb25fcmF0ZV8xMCkpICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGluY2FyY2VyYXRpb25fcmF0ZV8xMCkgJT4lDQogIGhlYWQoMTApDQoNCnBsb3RfdXNtYXAoZGF0YSA9IHN0YXRlX2luY2FyY2VyYXRpb25fZGF0YSwgdmFsdWVzID0gImluY2FyY2VyYXRpb25fcmF0ZV8xMCIsIGNvbG9yID0gImJsYWNrIikgKyANCiAgbGFicyh0aXRsZSA9ICJJbmNhcmNlcmF0aW9ucyBSYXRlcyBBY3Jvc3MgdGhlIFVuaXRlZCBTdGF0ZXMgaW4gMjAxMCIsDQogICAgICAgc3VidGl0bGUgPSAiTG91aXNpYW5hIGhhcyB0aGUgaGlnaGVzdCBpbmNhcmNlcmF0aW9uIHJhdGUgYXQgMTM0MSBwZXIgMTAwLDAwMCBwZW9wbGUuIikgKw0KICBzY2FsZV9maWxsX2NvbnRpbnVvdXMoDQogICAgbG93ID0gIndoaXRlIiwgaGlnaCA9ICJkZWVwIHNreSBibHVlIDQiLCBuYW1lID0gIkluY2FyY2VyYXRpb24gUmF0ZSIsIGxhYmVsID0gc2NhbGVzOjpjb21tYSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQ0KDQojIDIwMTAgLSBwb3B1bGF0aW9uDQoNCnBsb3RfdXNtYXAoZGF0YSA9IHN0YXRlX2luY2FyY2VyYXRpb25fZGF0YSwgdmFsdWVzID0gInRvdGFsX3N0YXRlX3BvcF8xMCIsIGNvbG9yID0gImJsYWNrIikgKw0KICBzY2FsZV9maWxsX2NvbnRpbnVvdXMobG93ID0gIndoaXRlIiwgaGlnaCA9ICJkZWVwIHNreSBibHVlIDQiLCBuYW1lID0gIlBvcHVsYXRpb24iLCBsYWJlbCA9IHNjYWxlczo6Y29tbWEpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSkgKyBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSkNCg0KIyAyMDAwIC0gaW5jYXJjZXJhdGlvbiByYXRlcw0KDQpzdGF0ZV9pbmNhcmNlcmF0aW9uX2RhdGEgJT4lDQogIGFycmFuZ2UoZGVzYyhpbmNhcmNlcmF0aW9uX3JhdGVfMDApKSAlPiUNCiAgc2VsZWN0KHN0YXRlLCBpbmNhcmNlcmF0aW9uX3JhdGVfMDApICU+JQ0KICBoZWFkKDEwKQ0KDQpwbG90X3VzbWFwKGRhdGEgPSBzdGF0ZV9pbmNhcmNlcmF0aW9uX2RhdGEsIHZhbHVlcyA9ICJpbmNhcmNlcmF0aW9uX3JhdGVfMTAiLCBjb2xvciA9ICJibGFjayIpICsgDQogIGxhYnModGl0bGUgPSAiSW5jYXJjZXJhdGlvbnMgUmF0ZXMgQWNyb3NzIHRoZSBVbml0ZWQgU3RhdGVzIGluIDIwMDAiLA0KICAgICAgIHN1YnRpdGxlID0gIkxvdWlzaWFuYSBoYXMgdGhlIGhpZ2hlc3QgaW5jYXJjZXJhdGlvbiByYXRlIGF0IDEzNjAgcGVyIDEwMCwwMDAgcGVvcGxlLiIpICsNCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKA0KICAgIGxvdyA9ICJ3aGl0ZSIsIGhpZ2ggPSAiZGVlcCBza3kgYmx1ZSA0IiwgbmFtZSA9ICJJbmNhcmNlcmF0aW9uIFJhdGUiLCBsYWJlbCA9IHNjYWxlczo6Y29tbWEpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikNCg0KIyAyMDAwIC0gcG9wdWxhdGlvbg0KDQpwbG90X3VzbWFwKGRhdGEgPSBzdGF0ZV9pbmNhcmNlcmF0aW9uX2RhdGEsIHZhbHVlcyA9ICJ0b3RhbF9zdGF0ZV9wb3BfMDAiLCBjb2xvciA9ICJibGFjayIpICsNCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKGxvdyA9ICJ3aGl0ZSIsIGhpZ2ggPSAiZGVlcCBza3kgYmx1ZSA0IiwgbmFtZSA9ICJQb3B1bGF0aW9uIiwgbGFiZWwgPSBzY2FsZXM6OmNvbW1hKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCkpICsgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCkpDQoNCg0KDQoNCg0KDQoNCnNmX3N0YXRlX2luY2FyY2VyYXRpb25fZGF0YSA8LSBzdF9hc19zZihzdGF0ZV9pbmNhcmNlcmF0aW9uX2RhdGEsIGNvb3JkcyA9IGMoImxvbmdpdHVkZSIsICJsYXRpdHVkZSIpLCBjcnMgPSA0MzI2KSANCg0KbWFwdmlldyhzZl9zdGF0ZV9pbmNhcmNlcmF0aW9uX2RhdGEsIHpjb2wgPSAidG90YWxfc3RhdGVfcG9wXzAwIikNCg0KYGBgDQoNCk5vdyB0aGF0IHdlIGhhdmUgYSBiZXR0ZXIgcGljdHVyZSBvZiB3aGF0IGluY2FyY2VyYXRpb24gcmF0ZXMgaGF2ZSBsb29rZWQgb3ZlciB0aW1lIGFjcm9zcyB0aGUgVW5pdGVkIFN0YXRlcywgbGV0J3MgdHJhbnNpdGlvbiBpbnRvIGxvb2tpbmcgYXQgcmVnaW9ucyBvbmx5LiBGb3IgdGhpcyBuZXh0IHBhcnQsIHdlJ3JlIHVzaW5nIHRoZSByZWdpb25zIGRlc2lnbmF0ZWQgYnkgdGhlIENlbnN1cyBCdXJlYXUuDQoNCiMjIyMgMi4gV2hpY2ggVS5TLiByZWdpb24gaGFkIHRoZSBoaWdoZXN0IGluY2FyY2VyYXRpb24gcmF0ZXMgaW4gMjAyMD8NCg0KQmFzZWQgb24gdGhlIG1hcHMgZ2VuZXJhdGVkIGJ5IHRoZSBjb2RlIGJlbG93LCBpdCBsb29rcyBsaWtlIFNvdXRoZXJuIHJlZ2lvbiBvZiB0aGUgVW5pdGVkIFN0YXRlcyBnZW5lcmFsbHkgaGFzIHRoZSBoaWdoZXN0IGluY2FyY2VyYXRpb24gcmF0ZXMuIEluIDIwMjAsIExvdWlzaWFuYSBhbmQgV2VzdCBWaXJnaW5pYSBoYWQgdGhlIGhpZ2hlc3QgaW5jYXJjZXJhdGlvbiByYXRlcy4NCg0KYGBge3J9DQoNCiMgbm9ydGhlYXN0IHJlZ2lvbg0KDQpwbG90X3VzbWFwKGluY2x1ZGUgPSAubm9ydGhlYXN0X3JlZ2lvbiwgZGF0YSA9IHN0YXRlX2luY2FyY2VyYXRpb25fZGF0YSwgdmFsdWVzID0gImluY2FyY2VyYXRpb25fcmF0ZV8yMCIsIGNvbG9yID0gImJsYWNrIikgKyBzY2FsZV9maWxsX2NvbnRpbnVvdXMobG93ID0gIndoaXRlIiwgaGlnaCA9ICJkZWVwIHNreSBibHVlIDQiLCBuYW1lID0gIkluY2FyY2VyYXRpb24gUmF0ZSIsIGxhYmVsID0gc2NhbGVzOjpjb21tYSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQ0KDQojIG1pZHdlc3QgcmVnaW9uDQoNCnBsb3RfdXNtYXAoaW5jbHVkZSA9IC5taWR3ZXN0X3JlZ2lvbiwgZGF0YSA9IHN0YXRlX2luY2FyY2VyYXRpb25fZGF0YSwgdmFsdWVzID0gImluY2FyY2VyYXRpb25fcmF0ZV8yMCIsIGNvbG9yID0gImJsYWNrIikgKyBzY2FsZV9maWxsX2NvbnRpbnVvdXMobG93ID0gIndoaXRlIiwgaGlnaCA9ICJkZWVwIHNreSBibHVlIDQiLCBuYW1lID0gIkluY2FyY2VyYXRpb24gUmF0ZSIsIGxhYmVsID0gc2NhbGVzOjpjb21tYSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQ0KDQojIHdlc3QgcmVnaW9uDQoNCnBsb3RfdXNtYXAoaW5jbHVkZSA9IC53ZXN0X3JlZ2lvbiwgZGF0YSA9IHN0YXRlX2luY2FyY2VyYXRpb25fZGF0YSwgdmFsdWVzID0gImluY2FyY2VyYXRpb25fcmF0ZV8yMCIsIGNvbG9yID0gImJsYWNrIikgKyBzY2FsZV9maWxsX2NvbnRpbnVvdXMobG93ID0gIndoaXRlIiwgaGlnaCA9ICJkZWVwIHNreSBibHVlIDQiLCBuYW1lID0gIkluY2FyY2VyYXRpb24gUmF0ZSIsIGxhYmVsID0gc2NhbGVzOjpjb21tYSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQ0KDQojIHNvdXRoIHJlZ2lvbg0KDQpwbG90X3VzbWFwKGluY2x1ZGUgPSAuc291dGhfcmVnaW9uLCBkYXRhID0gc3RhdGVfaW5jYXJjZXJhdGlvbl9kYXRhLCB2YWx1ZXMgPSAiaW5jYXJjZXJhdGlvbl9yYXRlXzIwIiwgY29sb3IgPSAiYmxhY2siKSArIHNjYWxlX2ZpbGxfY29udGludW91cyhsb3cgPSAid2hpdGUiLCBoaWdoID0gImRlZXAgc2t5IGJsdWUgNCIsIG5hbWUgPSAiSW5jYXJjZXJhdGlvbiBSYXRlIiwgbGFiZWwgPSBzY2FsZXM6OmNvbW1hKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpDQoNCnNvdXRoZXJuX2luY2FyY2VyYXRpb25fcmF0ZXMgPC0gc3RhdGVfaW5jYXJjZXJhdGlvbl9kYXRhICU+JQ0KICANCg0KDQpgYGANCg0KVG8gYW5zd2VyIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb24sIHdlJ2xsIHVzZSBhIGNsZWFuZXIgdmVyc2lvbiBvZiBvdXIgaW5pdGlhbCBkYXRhc2V0LiBUaGlzIG5ldywgY291bnR5LWxldmVsIGRhdGFzZXQgYWxzbyBpbmNsdWRlcyBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGFuZCBubyBsb25nZXIgaGFzIGNvbHVtbnMgZm9yIHN0YXRlIHNwZWNpZmljIGluZm9ybWF0aW9uLiBCZWZvcmUgZGl2aW5nIGludG8gb3VyIGNvbnRpbnVlZCBhbmFseXNpcyBvZiB0aGlzIGRhdGEsIHdlJ2xsIGFkZCBvbiBzb21lIG5ldyBjb2x1bW5zIHRvIGZpbmQgdGhlIG5ldCBjaGFuZ2UgaW4gaW5jYXJjZXJhdGVkIHBvcHVsYXRpb24gY291bnRzIHNpbmNlIDIwMDAuDQoNCiMjIyMgMy4gV2hpY2ggd2VyZSB0aGUgdG9wIDEwIFUuUy4gY291bnRpZXMgdGhhdCBzYXcgdGhlIGxhcmdlc3QgbmV0IGNoYW5nZSBpbiBwb3B1bGF0aW9uIGNvdW50cyBzaW5jZSAyMDAwPyBBbHRlcm5hdGl2ZWx5LCB3aGljaCB3ZXJlIHRoZSB0b3AgMTAgVS5TLiBjb3VudGllcyB0aGF0IHNhdyBlaXRoZXIgYSBkZWNyZWFzZSBvciBubyBjaGFuZ2UgaW4gcHJpc29uIHBvcHVsYXRpb24gc2luY2UgMjAxMD8gDQoNCg0KDQpgYGB7cn0NCg0KY291bnR5X2luY2FyY2VyYXRpb25fZGF0YSA8LSByZWFkX2NzdigiZGF0YS9jb3VudHlfY2Vuc3VzX2luY2FyY2VyYXRpb25fZGF0YS5jc3YiKQ0KDQojIHR1cm5zIGRhdGEgZnJhbWUgaW50byBhIHNwYXRpYWwgb2JqZWN0DQpzZl9jb3VudHlfaW5jYXJjZXJhdGlvbl9kYXRhIDwtIHN0X2FzX3NmKGNvdW50eV9pbmNhcmNlcmF0aW9uX2RhdGEsIGNvb3JkcyA9IGMoImxvbmdpdHVkZSIsICJsYXRpdHVkZSIpLCBjcnMgPSA0MzI2KSANCg0KY291bnR5X2luY2FyY2VyYXRpb25fZGF0YSA8LSBjb3VudHlfaW5jYXJjZXJhdGlvbl9kYXRhICU+JQ0KICBtdXRhdGUobmV0X2NoYW5nZV8wMF8xMCA9IGluY2FyY2VyYXRlZF8xMC1pbmNhcmNlcmF0ZWRfMDApICU+JQ0KICBtdXRhdGUobmV0X2NoYW5nZV8xMF8yMCA9IGluY2FyY2VyYXRlZF8yMC1pbmNhcmNlcmF0ZWRfMTApICU+JQ0KICBtdXRhdGUobmV0X2NoYW5nZV8wMF8yMCA9IGluY2FyY2VyYXRlZF8yMC1pbmNhcmNlcmF0ZWRfMDApDQoNCiMgbmV0IGNoYW5nZSBiZXR3ZWVuIDIwMDAgYW5kIDIwMTANCg0KY291bnR5X2luY2FyY2VyYXRpb25fZGF0YSAlPiUNCiAgYXJyYW5nZShkZXNjKG5ldF9jaGFuZ2VfMDBfMTApKSAlPiUNCiAgc2VsZWN0KHN0YXRlLCBjb3VudHksIG5ldF9jaGFuZ2VfMDBfMTApICU+JQ0KICBoZWFkKDEwKQ0KDQpjb3VudHlfaW5jYXJjZXJhdGlvbl9kYXRhICU+JQ0KICBhcnJhbmdlKG5ldF9jaGFuZ2VfMDBfMTApICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgbmV0X2NoYW5nZV8wMF8xMCkgJT4lDQogIGhlYWQoMTApDQoNCmNvdW50eV9pbmNhcmNlcmF0aW9uX2RhdGEgJT4lDQogIGZpbHRlcihuZXRfY2hhbmdlXzAwXzEwID09IDApICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgbmV0X2NoYW5nZV8wMF8xMCkNCg0KIyBzdGF0aWMgbWFwDQpwbG90X3VzbWFwKHJlZ2lvbnMgPSAiY291bnRpZXMiLCBkYXRhID0gY291bnR5X2luY2FyY2VyYXRpb25fZGF0YSwgdmFsdWVzID0gIm5ldF9jaGFuZ2VfMDBfMTAiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh0aXRsZSA9ICJUaXRsZSIsDQogICAgICAgc3VidGl0bGUgPSAiU3VidGl0bGUiKSArDQogIHNjYWxlX2ZpbGxfYmlubmVkKHR5cGUgPSAidmlyaWRpcyIsIG5hbWUgPSAiTmV0IENoYW5nZSIsIGxhYmVsID0gc2NhbGVzOjpjb21tYSkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikNCiAgDQojIGludGVyYWN0aXZlDQptYXB2aWV3KHNmX2NvdW50eV9pbmNhcmNlcmF0aW9uX2RhdGEsIHpjb2wgPSAibmV0X2NoYW5nZV8wMF8xMCIpDQoNCiMgbmV0IGNoYW5nZSBiZXR3ZWVuIDIwMTAgYW5kIDIwMjANCg0KY291bnR5X2luY2FyY2VyYXRpb25fZGF0YSAlPiUNCiAgYXJyYW5nZShkZXNjKG5ldF9jaGFuZ2VfMTBfMjApKSAlPiUNCiAgc2VsZWN0KHN0YXRlLCBjb3VudHksIG5ldF9jaGFuZ2VfMTBfMjApICU+JQ0KICBoZWFkKDEwKQ0KDQpjb3VudHlfaW5jYXJjZXJhdGlvbl9kYXRhICU+JQ0KICBhcnJhbmdlKG5ldF9jaGFuZ2VfMTBfMjApICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgbmV0X2NoYW5nZV8xMF8yMCkgJT4lDQogIGhlYWQoMTApDQoNCmNvdW50eV9pbmNhcmNlcmF0aW9uX2RhdGEgJT4lDQogIGZpbHRlcihuZXRfY2hhbmdlXzEwXzIwID09IDApICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgbmV0X2NoYW5nZV8xMF8yMCkNCg0KIyBuZXQgY2hhbmdlIGJldHdlZW4gMjAwMCBhbmQgMjAyMA0KDQpjb3VudHlfaW5jYXJjZXJhdGlvbl9kYXRhICU+JQ0KICBhcnJhbmdlKGRlc2MobmV0X2NoYW5nZV8wMF8yMCkpICU+JQ0KICBzZWxlY3Qoc3RhdGUsIGNvdW50eSwgbmV0X2NoYW5nZV8wMF8yMCkgJT4lDQogIGhlYWQoMTApDQoNCmNvdW50eV9pbmNhcmNlcmF0aW9uX2RhdGEgJT4lDQogIGFycmFuZ2UobmV0X2NoYW5nZV8wMF8yMCkgJT4lDQogIHNlbGVjdChzdGF0ZSwgY291bnR5LCBuZXRfY2hhbmdlXzAwXzIwKSAlPiUNCiAgaGVhZCgxMCkNCg0KY291bnR5X2luY2FyY2VyYXRpb25fZGF0YSAlPiUNCiAgZmlsdGVyKG5ldF9jaGFuZ2VfMDBfMjAgPT0gMCkgJT4lDQogIHNlbGVjdChzdGF0ZSwgY291bnR5LCBuZXRfY2hhbmdlXzAwXzIwKQ0KDQpgYGANCg0KTm93LCBsZXQncyBsb29rIGF0IHdoYXQgcGVyY2VudGFnZSBtYWtlcyB1cCB0aGUgaW5jYXJjZXJhdGVkIHBvcHVsYXRpb24gaW4gZWFjaCBzdGF0ZSBhbmQgY29tcGFyZSBpdCB0byBmaWd1cmVzIGZyb20gMjAxMCBhbmQgMjAwMC4gSGF2ZSB0aGV5IGNoYW5nZWQgYXQgYWxsPyBXaGF0IGNvdWxkIGFjY291bnQgZm9yIHRoYXQgY2hhbmdlPw0KDQojIyMjIDQuIEZvciBlYWNoIFUuUy4gc3RhdGUsIHJvdWdobHkgaG93IG11Y2ggKCUpIG9mIHRoZSBzdGF0ZeKAmXMgYWR1bHQgcG9wdWxhdGlvbiB3YXMgaW5jYXJjZXJhdGVkL2JlaW5nIGhlbGQgaW4gYSBjb3JyZWN0aW9uYWwgZmFjaWxpdHkgaW4gMjAyMD8gQ29tcGFyZSBpdCB0byBmaWd1cmVzIGZyb20gMjAxMCBhbmQgMjAwMC4NCg0KYGBge3J9DQoNCiMgMjAyMA0KDQpwbG90X3VzbWFwKGRhdGEgPSBpbmNhcmNlcmF0aW9uX3JhdGVzX3BjdCwgdmFsdWVzID0gInBjdF9pbmNhcmNlcmF0ZWRfMjAiLCBjb2xvciA9ICJibGFjayIpICsgDQogIGxhYnModGl0bGUgPSAiUGVyY2VudCBvZiBUb3RhbCBQb3B1bGF0aW9uIEluY2FyY2VyYXRlZCBieSBTdGF0ZSBpbiAyMDIwIikgKw0KICBzY2FsZV9maWxsX2NvbnRpbnVvdXMoDQogICAgbG93ID0gIndoaXRlIiwgaGlnaCA9ICJkZWVwIHBpbmsgNCIsIG5hbWUgPSAiUGVyY2VudCBJbmNhcmNlcmF0ZWQiLCBsYWJlbCA9IHNjYWxlczo6Y29tbWEpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikNCg0KIyAyMDEwDQoNCnBsb3RfdXNtYXAoZGF0YSA9IGluY2FyY2VyYXRpb25fcmF0ZXNfcGN0LCB2YWx1ZXMgPSAicGN0X2luY2FyY2VyYXRlZF8xMCIsIGNvbG9yID0gImJsYWNrIikgKyANCiAgbGFicyh0aXRsZSA9ICJQZXJjZW50IG9mIFRvdGFsIFBvcHVsYXRpb24gSW5jYXJjZXJhdGVkIGJ5IFN0YXRlIGluIDIwMTAiKSArDQogIHNjYWxlX2ZpbGxfY29udGludW91cygNCiAgICBsb3cgPSAid2hpdGUiLCBoaWdoID0gImRlZXAgcGluayA0IiwgbmFtZSA9ICJQZXJjZW50IEluY2FyY2VyYXRlZCIsIGxhYmVsID0gc2NhbGVzOjpjb21tYSkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQ0KDQojIDIwMDANCg0KcGxvdF91c21hcChkYXRhID0gaW5jYXJjZXJhdGlvbl9yYXRlc19wY3QsIHZhbHVlcyA9ICJwY3RfaW5jYXJjZXJhdGVkXzAwIiwgY29sb3IgPSAiYmxhY2siKSArIA0KICBsYWJzKHRpdGxlID0gIlBlcmNlbnQgb2YgVG90YWwgUG9wdWxhdGlvbiBJbmNhcmNlcmF0ZWQgYnkgU3RhdGUgaW4gMjAwMCIpICsNCiAgc2NhbGVfZmlsbF9jb250aW51b3VzKA0KICAgIGxvdyA9ICJ3aGl0ZSIsIGhpZ2ggPSAiZGVlcCBwaW5rIDQiLCBuYW1lID0gIlBlcmNlbnQgSW5jYXJjZXJhdGVkIiwgbGFiZWwgPSBzY2FsZXM6OmNvbW1hKSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpDQoNCmBgYA0KDQojIyMjIDUuIFVzaW5nIEFDUyBkYXRhLCBjb21wYXJlIG1lZGlhbiBob3VzZWhvbGQgaW5jb21lcyBhbmQgaW5jYXJjZXJhdGlvbiByYXRlcyBmb3IgQ29sb3JhZG8sIFBlbm5zeWx2YW5pYSwgTWlzc2lzc2lwcGksIExvdWlzaWFuYSwgYW5kIEdlb3JnaWEuDQoNCkZvciB0aGlzIGZpbmFsIHF1ZXN0aW9uLCB3ZSdyZSBsb29raW5nIGF0IHRoZSBmaXZlIHN0YXRlcyB3ZSBmb3VuZCBpbiB0aGUgdmVyeSBmaXJzdCBjb2RlYmxvY2sgd2hlcmUgd2UgbG9va2VkIGF0IHRoZSBjb3VudGllcyB3aXRoIHRoZSBoaWdoZXN0IHBlcmNlbnRhZ2VzIG9mIGluY2FyY2VyYXRlZCBwb3B1bGF0aW9uLiBBcyBhIHJlZnJlc2hlciwgdGhvc2Ugc3RhdGVzL2NvdW50aWVzIGFyZSBsaXN0ZWQgYmVsb3c6DQoNCg0KQ08JQ3Jvd2xleSBDb3VudHkJNDguMTI1NjMzMgkJDQojIFBBCUZvcmVzdCBDb3VudHkJMzguMDQ2NzUxOAkJDQojIE1TCUlzc2FxdWVuYSBDb3VudHkJMzYuODQ2MDM4OQkJDQojIExBCVdlc3QgRmVsaWNpYW5hIFBhcmlzaAkzNC41MTMzODk5CQkNCiMgR0EJV2hlZWxlciBDb3VudHkgMzEuNjE1NTgwMg0KDQoNCmBgYHtyfQ0KDQojIGhpZ2hlc3QgY291bnR5IGluY2FyY2VyYXRpb24gcmF0ZXMNCg0KIyBDTwlDcm93bGV5IENvdW50eQk0OC4xMjU2MzMyCQkNCiMgUEEJRm9yZXN0IENvdW50eQkzOC4wNDY3NTE4CQkNCiMgTVMJSXNzYXF1ZW5hIENvdW50eQkzNi44NDYwMzg5CQkNCiMgTEEJV2VzdCBGZWxpY2lhbmEgUGFyaXNoCTM0LjUxMzM4OTkJCQ0KIyBHQQlXaGVlbGVyIENvdW50eSAzMS42MTU1ODAyDQoNCiMgbG9hZCBhY3MgdmFyaWFibGVzDQoNCmFjc192YXJpYWJsZXMgPC0gbG9hZF92YXJpYWJsZXMoeWVhciA9IDIwMjAsDQogICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9ICJhY3M1IiwNCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IFRSVUUpDQoNCiMgbG9hZCBtZWRpYW4gaW5jb21lIGVzdGltYXRlcyBmb3IgQ29sb3JhZG8sIFBlbm5zeWx2YW5pYSwgTWlzc2lzc2lwcGksIExvdWlzaWFuYSwgYW5kIEdlb3JnaWENCg0KY29sb3JhZG9fbWVkaW5jb21lIDwtIGdldF9hY3MoZ2VvZ3JhcGh5ID0gImNvdW50eSIsDQogICAgICAgICAgICAgIHZhcmlhYmxlcyA9IGMobWVkaW5jb21lID0gIkIxOTAxM18wMDEiKSwNCiAgICAgICAgICAgICAgc3RhdGUgPSAiQ08iLA0KICAgICAgICAgICAgICB5ZWFyID0gMjAyMCkNCg0KcGVubnN5bHZhbmlhX21lZGluY29tIDwtIGdldF9hY3MoZ2VvZ3JhcGh5ID0gImNvdW50eSIsDQogICAgICAgICAgICAgIHZhcmlhYmxlcyA9IGMobWVkaW5jb21lID0gIkIxOTAxM18wMDEiKSwNCiAgICAgICAgICAgICAgc3RhdGUgPSAiUEEiLA0KICAgICAgICAgICAgICB5ZWFyID0gMjAyMCkNCg0KbWlzc2lzc2lwcGlfbWVkaW5jb20gPC0gZ2V0X2FjcyhnZW9ncmFwaHkgPSAiY291bnR5IiwNCiAgICAgICAgICAgICAgdmFyaWFibGVzID0gYyhtZWRpbmNvbWUgPSAiQjE5MDEzXzAwMSIpLA0KICAgICAgICAgICAgICBzdGF0ZSA9ICJNUyIsDQogICAgICAgICAgICAgIHllYXIgPSAyMDIwKQ0KDQpsb3Vpc2lhbmFfYWNzKGdlb2dyYXBoeSA9ICJjb3VudHkiLA0KICAgICAgICAgICAgICB2YXJpYWJsZXMgPSBjKG1lZGluY29tZSA9ICJCMTkwMTNfMDAxIiksDQogICAgICAgICAgICAgIHN0YXRlID0gIkxBIiwNCiAgICAgICAgICAgICAgeWVhciA9IDIwMjApDQoNCmdlb3JnaWFfYWNzKGdlb2dyYXBoeSA9ICJjb3VudHkiLA0KICAgICAgICAgICAgICB2YXJpYWJsZXMgPSBjKG1lZGluY29tZSA9ICJCMTkwMTNfMDAxIiksDQogICAgICAgICAgICAgIHN0YXRlID0gIkdBIiwNCiAgICAgICAgICAgICAgeWVhciA9IDIwMjApDQoNCg0KDQpgYGANCg0KIyMjIyBTdW1tYXJ5DQoNCg==